package com.example.android_20190604_01;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class progressdialog extends Activity {
//    该程序模拟填充长度为100的数组
    private int[] data=new int[100];
    int hasData=0;
//    定义进度对话框的标识
    final int PROGRESS_DIALOG=0;
//    记录进度对话框的完成百分比
    int progressStatus =0;
    ProgressDialog pd;
//    定义一个负责更新进度的Handler
    Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_progressdialog);

        Button execBn=(Button)findViewById(R.id.exec);
        execBn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                showDialog(PROGRESS_DIALOG);
            }
        });
// -------------Handler消息处理-----------------------------
        handler=new Handler()
        {
            @Override
            public void handleMessage(Message msg)
            {
//                表明消息是由该程序发送的
                if(msg.what==1)
                {
                    pd.setProgress(progressStatus);
                }
            }
        };

    }
    @Override
    public Dialog onCreateDialog(int id,Bundle status)
    {
        System.out.println("------create------");
        switch (id)
        {
            case PROGRESS_DIALOG:
                pd=new ProgressDialog(this);//创建进度对话框
                pd.setMax(100);
                pd.setTitle("任务完成百分比");//设置对话框的标题
                pd.setMessage("耗时任务的完成百分比");//设置对话框显示的内容
                pd.setCancelable(false);//设置对话框不能用“取消”按钮关闭
                pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置对话框的进度条风格
                pd.setIndeterminate(false);//设置对话框的进度条是否显示进度
                break;
        }
        return pd;
    }
//    该方法将在onCreateDialog方法之后被调回
    @Override
    public void onPrepareDialog(int id,Dialog dialog)
    {
        System.out.print("------prepare------");
        super.onPrepareDialog(id,dialog);
        switch (id)
        {
            case PROGRESS_DIALOG:
//                对话框进度清零
                pd.incrementProgressBy(-pd.getProgress());
                new Thread()
                {
                    public void run()
                    {
                        while (progressStatus<100)
                        {
//                            获取耗时操作的完成百分比
                            progressStatus=doWork();
//                            发送消息到Handler
                            handler.sendEmptyMessage(1);
                        }
//                        如果任务已经完成
                        if(progressStatus>=100)
                        {
//                            关闭对话框
                            pd.dismiss();
                        }
                    }
                }.start();
                break;
        }
    }
//    模拟一个耗时操作
    public int doWork()
    {
//        为数组元素赋值
        data[hasData++]=(int)(Math.random()*33);
        try{
            Thread.sleep(50);
        }catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        return hasData;
    }
}
